{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Домашняя работа по уроку \"Управляющие конструкции и коллекции. Часть 1\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Задание 1\n",
    "\n",
    "Дана переменная, в которой хранится слово из латинских букв. Напишите код, который выводит на экран:\n",
    "- среднюю букву, если число букв в слове нечетное;\n",
    "- две средних буквы, если число букв четное."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "k\n"
     ]
    }
   ],
   "source": [
    "word = 'Workout'\n",
    "word_len = len(word)\n",
    "if word_len % 2 == 0:\n",
    "    WORD_SLICE = slice(int(word_len/2)-1, int(word_len/2)+1)\n",
    "else:\n",
    "    WORD_SLICE = slice(word_len//2, word_len//2+1)\n",
    "print(word[WORD_SLICE])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Задание 2\n",
    "\n",
    "Напишите программу, которая последовательно запрашивает у пользователя числа (по одному за раз) и после первого нуля выводит сумму всех ранее введенных чисел."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Программа рассчета суммы чисел, для завершения введите 0\n",
      "Введите целое положительное число: 15\n",
      "Введите целое положительное число: 3\n",
      "Введите целое положительное число: 28\n",
      "Введите целое положительное число: 0\n",
      "Сумма введенных чисел: 46\n"
     ]
    }
   ],
   "source": [
    "import re\n",
    "\n",
    "def check_natural_number(number):\n",
    "    \"\"\"Функция проверяет является ли число натуральным\"\"\"\n",
    "    number = str(number)\n",
    "    if re.compile(r'^[1-9]\\d*$').search(number) is None:\n",
    "        return 1\n",
    "    return 0\n",
    "\n",
    "number_sum = 0\n",
    "print(\"Программа рассчета суммы чисел, для завершения введите 0\")\n",
    "while True:\n",
    "    number = input(\"Введите целое положительное число: \")\n",
    "    number = number.strip()\n",
    "    return_code = check_natural_number(number)\n",
    "    if return_code != 0 and number != '0':\n",
    "        print(\"Введено некорректное значение числа, попробуйте еще раз\")\n",
    "        continue\n",
    "    if number == '0':\n",
    "        print(f\"Сумма введенных чисел: {number_sum}\")\n",
    "        break\n",
    "    number = int(number)\n",
    "    number_sum += number"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Задание 3\n",
    "\n",
    "Мы делаем MVP dating-сервиса, и у нас есть список парней и девушек.\n",
    "Выдвигаем гипотезу: лучшие рекомендации мы получим, если просто отсортируем имена по алфавиту и познакомим людей с одинаковыми индексами после сортировки! Но мы не будем никого знакомить, если кто-то может остаться без пары:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Идеальные пары:\n",
      "Peter и Kate\n",
      "Alex и Liza\n",
      "John и Kira\n",
      "Arthur и Emma\n",
      "Richard и Trisha\n"
     ]
    }
   ],
   "source": [
    "boys = ['Peter', 'Alex', 'John', 'Arthur', 'Richard']\n",
    "girls = ['Kate', 'Liza', 'Kira', 'Emma', 'Trisha']\n",
    "\n",
    "if len(boys) != len(girls):\n",
    "    print(\"Внимание, кто-то может остаться без пары!\")\n",
    "else:\n",
    "    print(\"Идеальные пары:\")\n",
    "    for boy, girl in zip(boys, girls):\n",
    "        print(f\"{boy} и {girl}\")\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Задание 4\n",
    "\n",
    "У нас есть список, содержащий информацию о среднедневной температуре в Фаренгейтах за произвольный период по странам (структура данных в примере). Необходимо написать код, который рассчитает среднюю температуру за период в Цельсиях(!) для каждой страны."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Thailand: 23.9 C\n",
      "Germany: 13.8 C\n",
      "Russia: 3.7 C\n",
      "Poland: 12.0 C\n"
     ]
    }
   ],
   "source": [
    "countries_temperature = [\n",
    "    ['Thailand', [75.2, 77, 78.8, 73.4, 68, 75.2, 77]],\n",
    "    ['Germany', [57.2, 55.4, 59, 59, 53.6]],\n",
    "    ['Russia', [35.6, 37.4, 39.2, 41, 42.8, 39.2, 35.6]],\n",
    "    ['Poland', [50, 50, 53.6, 57.2, 55.4, 55.4]]\n",
    "]\n",
    "\n",
    "def convert_f_to_c(f):\n",
    "    return round((5/9)*(f-32), 1)\n",
    "\n",
    "for country, tempretature_f in countries_temperature:\n",
    "    tempretature_с = [convert_f_to_c(t) for t in tempretature_f]\n",
    "    print(f'{country}: {round(sum(tempretature_с)/len(tempretature_с),1)} C')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Задание 5 (необязательное)\n",
    "\n",
    "Дан поток логов по количеству просмотренных страниц для каждого пользователя. Вам необходимо написать алгоритм, который считает среднее значение просмотров на пользователя. Т. е. надо посчитать отношение суммы всех просмотров к количеству уникальных пользователей."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Среднее кол-во просмотров на уникального пользователя: 23.25\n"
     ]
    }
   ],
   "source": [
    "stream = [\n",
    "    '2018-01-01,user1,3',\n",
    "    '2018-01-07,user1,4',\n",
    "    '2018-03-29,user1,1',\n",
    "    '2018-04-04,user1,13',\n",
    "    '2018-01-05,user2,7',\n",
    "    '2018-06-14,user3,4',\n",
    "    '2018-07-02,user3,10',\n",
    "    '2018-03-21,user4,19',\n",
    "    '2018-03-22,user4,4',\n",
    "    '2018-04-22,user4,8',\n",
    "    '2018-05-03,user4,9',\n",
    "    '2018-05-11,user4,11',\n",
    "]\n",
    "\n",
    "uniq_user_list = []\n",
    "view_counter = 0\n",
    "for log_str in stream:\n",
    "    _, user_name, user_view_counter = log_str.split(',')\n",
    "    if user_name not in uniq_user_list:\n",
    "        uniq_user_list += [user_name]\n",
    "    view_counter += int(user_view_counter)\n",
    "if len(uniq_user_list) != 0:\n",
    "    print(f\"Среднее кол-во просмотров на уникального пользователя: {view_counter/len(uniq_user_list)}\")\n",
    "else:\n",
    "    print(f\"Не найдены пользователи в записях логов, посчитать средние просмотры невозможно\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Задание 6 (необязательное)\n",
    "\n",
    "Необходимо у пользователя запрашивать набор чисел разделенных пробелом. В результате должны выводиться числа, которые повторяются в вводе более одного раза."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Введите числа через пробел: 1 2 3 1 3 23 26 27 23\n",
      "Повторяющиеся числа: 1, 3, 23\n"
     ]
    }
   ],
   "source": [
    "from collections import Counter\n",
    "\n",
    "numbers_line = input('Введите числа через пробел: ')\n",
    "numbers_list = numbers_line.split(' ')\n",
    "while True:\n",
    "    if '' in numbers_list:\n",
    "        numbers_list.remove('')\n",
    "    else:\n",
    "        break\n",
    "\n",
    "\n",
    "\"\"\"\n",
    "# Решение через Counter\n",
    "c_obj = Counter(numbers_list)\n",
    "repeat_numbers_list = []\n",
    "for number, counter in c_obj.items():\n",
    "    if counter > 1:\n",
    "        repeat_numbers_list += [number]\n",
    "if len(repeat_numbers_list) > 0:\n",
    "    print(f'Повторяющиеся числа: {\", \".join(repeat_numbers_list)}')\n",
    "else:\n",
    "    print('Повторяющиеся числа отсутствуют')\n",
    "\"\"\"\n",
    "\n",
    "not_uniq_numbers_list = []\n",
    "uniq_numbers_list = []\n",
    "for number in numbers_list:\n",
    "    if number not in uniq_numbers_list:\n",
    "        uniq_numbers_list += [number]\n",
    "        continue\n",
    "    if number not in not_uniq_numbers_list:\n",
    "        not_uniq_numbers_list += [number]\n",
    "if len(not_uniq_numbers_list) > 0:\n",
    "    print(f'Повторяющиеся числа: {\", \".join(not_uniq_numbers_list)}')\n",
    "else:\n",
    "    print('Повторяющиеся числа отсутствуют')   "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
